#!/bin/bash

# SonarQube 代码扫描脚本

set -e

# 配置 - 请修改为你的实际值
SONAR_HOST_URL="http://localhost:9000"
SONAR_TOKEN="YOUR_SONARQUBE_TOKEN_HERE"  # 请替换为你的实际 Token
PROJECT_KEY="springboot-apm-demo"

# 颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo "=========================================="
echo "SonarQube 代码质量分析"
echo "=========================================="

# 检查 Token 是否配置
if [ "$SONAR_TOKEN" = "YOUR_SONARQUBE_TOKEN_HERE" ]; then
    echo -e "${RED}错误: 请先配置 SONAR_TOKEN${NC}"
    echo ""
    echo "获取 Token 的步骤："
    echo "1. 访问 SonarQube: ${SONAR_HOST_URL}"
    echo "2. 登录后点击右上角用户图标"
    echo "3. My Account -> Security -> Generate Tokens"
    echo "4. 生成 Token 并复制"
    echo "5. 编辑此脚本，将 Token 粘贴到 SONAR_TOKEN 变量"
    echo ""
    exit 1
fi

# 检查 SonarQube 服务是否可用
echo -e "${YELLOW}检查 SonarQube 服务...${NC}"
if curl -s -o /dev/null -w "%{http_code}" "${SONAR_HOST_URL}/api/system/status" | grep -q "200"; then
    echo -e "${GREEN}✓ SonarQube 服务正常${NC}"
else
    echo -e "${RED}✗ 无法连接到 SonarQube: ${SONAR_HOST_URL}${NC}"
    echo "请检查 SonarQube 是否正在运行"
    exit 1
fi

# 清理并编译项目
echo ""
echo -e "${YELLOW}1. 清理并编译项目...${NC}"
mvn clean compile

# 运行测试并生成覆盖率报告
echo ""
echo -e "${YELLOW}2. 运行测试并生成覆盖率报告...${NC}"
mvn test jacoco:report

# 运行 SonarQube 分析
echo ""
echo -e "${YELLOW}3. 运行 SonarQube 分析...${NC}"
mvn sonar:sonar \
  -Dsonar.projectKey=${PROJECT_KEY} \
  -Dsonar.host.url=${SONAR_HOST_URL} \
  -Dsonar.login=${SONAR_TOKEN}

# 分析完成
echo ""
echo "=========================================="
echo -e "${GREEN}分析完成！${NC}"
echo "=========================================="
echo ""
echo "查看报告: ${SONAR_HOST_URL}/dashboard?id=${PROJECT_KEY}"
echo ""

# 尝试自动打开浏览器（macOS）
if [[ "$OSTYPE" == "darwin"* ]]; then
    read -p "是否要在浏览器中打开报告? (y/n): " open_browser
    if [ "$open_browser" = "y" ] || [ "$open_browser" = "Y" ]; then
        open "${SONAR_HOST_URL}/dashboard?id=${PROJECT_KEY}"
    fi
fi

